<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        const p1 = {
            name:'zhangsan',
            age:18,
            info:{
                weight:'130kg',
                height:'181cm'
            },
            address:{
                city:'济南',
                desc:{
                    script6:'历山路36号'
                }
            },
            hobby:['跳舞','rap','打篮球']

        }

        // Object.assign(新对象,目标对象);

        // const p2 = Object.assign({},p1);

        // const p2 = JSON.parse(JSON.stringify(p1));




        // 普通拷贝数组 
        // var arr2 = [1,3,3,45,6,4,3,221];
        // var res = [];
        // for(let v of arr2){
        //     res.push(v);
        // }


        // // 普通拷贝对象 
        // const p11 = {
        //     name:'张三',
        //     age:18
        // }

        // const res = {};

        // for(let i in p11){
        //     // i 是键  p11[i] 是值
        //     res[i] =  p11[i]
        // }


        // 递归实现深拷贝  
        // 即可以拷贝多维数组  也可以拷贝多维对象
        // function deepCopy(target,origin){
        //     // target 是目标对象
        //     // origin 是原始对象 
        //     for(let k in origin){
        //         // 如果origin[k]对应的是 数组 
                
        //         if(origin[k].constructor === Array){
        //             target[k] = []
        //             deepCopy(target[k],origin[k])
        //         }

        //         // 如果origin[k]对应的是 对象
        //         else if(origin[k].constructor === Object){
        //             target[k] = {};
        //             deepCopy(target[k],origin[k])
        //         }
        //         else{
        //         // 如果origin[k]对应的不是 数组 并且不是对象 
        //         // 直接转存  
        //         target[k] = origin[k];
        //         }
        //     }
        //     return target
        // }

        //如果 键对应的值 是个对象或者数组  
        // 那么就需要准备一个空对象 或者空数组 
        // {name:'张三',hobby:[],info:{}}
        
        function deepCopy(target,origin){

            for(let k in origin){
                if(origin[k].constructor === Object){
                    target[k] = {}
                    deepCopy(target[k],origin[k])
                }
                else if(origin[k].constructor === Array){
                    target[k] = []
                    deepCopy(target[k],origin[k])

                }
                else{
                    target[k] = origin[k];
                }
            }

            return target
        }


        const data = deepCopy({},p1);

        // console.log(data);


        // 修改第一层数据 

        // data.name = '蔡徐坤';
        // console.log(p1,data);

        // // 修改第二层 
        // data.info.height = '198cm';
        // console.log(p1,data);

        // 修改第三层 
        data.address.desc.script6 = '8888爱的发水电费撒地方'
        

        console.log(data,p1);
    </script>
</body>
</html>